<?php

// +----------------------------------------------------------------------
// | ThinkAdmin
// +----------------------------------------------------------------------
// | 版权所有 2014~2017 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
// +----------------------------------------------------------------------
// | 官方网站: http://think.ctolog.com
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// +----------------------------------------------------------------------
// | github开源项目：https://github.com/zoujingli/ThinkAdmin
// +----------------------------------------------------------------------

use service\DataService;
use service\NodeService;
use think\Db;
use mailer\PHPMailer;
use tupianSB\AipOcr;
use yuyin\AipSpeech;
use mailer\SMTP;
/**
 * 打印输出数据到文件
 * @param mixed $data 输出的数据
 * @param bool $force 强制替换
 * @param string|null $file
 */
function p($data, $force = false, $file = null)
{
    is_null($file) && $file = env('runtime_path') . date('Ymd') . '.txt';
    $str = (is_string($data) ? $data : (is_array($data) || is_object($data)) ? print_r($data, true) : var_export($data, true)) . PHP_EOL;
    $force ? file_put_contents($file, $str) : file_put_contents($file, $str, FILE_APPEND);
}

/**
 * RBAC节点权限验证
 * @param string $node
 * @return bool
 */
function auth($node)
{
    return NodeService::checkAuthNode($node);
}

/**
 * 设备或配置系统参数
 * @param string $name 参数名称
 * @param bool $value 默认是null为获取值，否则为更新
 * @return string|bool
 * @throws \think\Exception
 * @throws \think\exception\PDOException
 */
function sysconf($name, $value = null)
{
    static $config = [];
    if ($value !== null) {
        list($config, $data) = [[], ['name' => $name, 'value' => $value]];
        return DataService::save('SystemConfig', $data, 'name');
    }
    if (empty($config)) {
        $config = Db::name('SystemConfig')->column('name,value');
    }
    return isset($config[$name]) ? $config[$name] : '';
}


/**
 * 设备或配置系统参数
 * @param string $name 参数名称
 * @param bool $value 默认是null为获取值，否则为更新
 * @return string|bool
 * @throws \think\Exception
 * @throws \think\exception\PDOException
 */
function getImgSrc($name)
{
    static $config = [];
    if (empty($config)) {
        $config = Db::name('SystemConfigCopy')->column('dclock,value');
    }
    $daan = '/src="(.*?)"/is';
    preg_match($daan,$config[$name], $matches2);
    return isset($config[$name]) ? $matches2[1] : '';
}

/**
 * 日期格式标准输出
 * @param string $datetime 输入日期
 * @param string $format 输出格式
 * @return false|string
 */
function format_datetime($datetime, $format = 'Y年m月d日 H:i:s')
{
    return date($format, strtotime($datetime));
}

/**
 * UTF8字符串加密
 * @param string $string
 * @return string
 */
function encode($string)
{
    list($chars, $length) = ['', strlen($string = iconv('utf-8', 'gbk', $string))];
    for ($i = 0; $i < $length; $i++) {
        $chars .= str_pad(base_convert(ord($string[$i]), 10, 36), 2, 0, 0);
    }
    return $chars;
}

/**
 * UTF8字符串解密
 * @param string $string
 * @return string
 */
function decode($string)
{
    $chars = '';
    foreach (str_split($string, 2) as $char) {
        $chars .= chr(intval(base_convert($char, 36, 10)));
    }
    return iconv('gbk', 'utf-8', $chars);
}

/**
 * 下载远程文件到本地
 * @param string $url 远程图片地址
 * @return string
 */
function local_image($url)
{
    return \service\FileService::download($url)['url'];
}

/**
 * 删除html标签
 * @param $strr
 * @return string
 */
function delP($strr){
    return strip_tags($strr);             //删除html标签
}

/**
 * 公共请求
 * @param $url
 * @param null $data
 * @return mixed
 */
function https_request($url,$data = null){
    $curl = curl_init();
    //设置请求地址
    curl_setopt($curl,CURLOPT_URL,$url);
    //以下两个都是设置不效验证书
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);

    if(!empty($data)){
        //设置网络延迟时间
        curl_setopt($curl,CURLOPT_TIMEOUT,30);
        //设置为post请求
        curl_setopt($curl,CURLOPT_POST,1);
        //post请求带参数
        curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
    }
    //返回的数据不直接显示在页面上
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
    //执行
    $output = curl_exec($curl);
    //关闭语柄
    curl_close($curl);
    //返回数据
    return $output;
}
//公共返回方法
function ajaxReturn($msg = '',$code = 0,$data = [],$type=0){
    if(!empty($data)){
        $json['datas'] = $data;
    }
    $json['msg'] = $msg;
    $json['code'] = $code;
    if($type){
        return json_encode($json,256);
    }else{
        return json($json);
    }
}
//随机生成4到6位数的一个数
function set_rand(){
    $rand = mt_rand(1000,999999);
    if(Db::name('php_sms')->find($rand)){
        $rand = mt_rand(1000,999999);
    }
    return $rand;
}
/**
 * 文件上传处理
 *
 *      1  上传失败
 */
function setFile($file){
    //获取文件
    $data = $file;
    //获取文件名 且 32位加密
    $str = $data['name'];
    $name =  substr(md5(substr($str,0,strrpos($str,'.'))), 8, 16);                    //文件除开后缀名称
    $jpg =strrchr($str,'.');                        //文件后缀名称=
    $file_name = $name.$jpg;            //新的文件名称
    // 储存目录
    $dir =  "static/appimage/".date("Ymd",time());
    //定义文件储存位置
    $new_imageUrl = $dir.'/'.$file_name;
    //判断文件目录是否存在 不存在就创建他
    if(!file_exists($dir)){
        mkdir($dir);
    }
    //获取文件旧地址
    $old_address = $data['tmp_name'];
    //文件存在  添加文件  判断$data['file']['error'];

    if ($data['error'] == 0){
        $result = move_uploaded_file($old_address,$new_imageUrl);
        if($result) return $new_imageUrl;
    }else{
        return 0;
    }
}

// 公共发送邮件函数
function sendEmail($desc_content, $toemail){
    $mail = new PHPMailer();
    $mail->isSMTP();        // 使用SMTP服务
    $mail->CharSet = "utf8";// 编码格式为utf8，不设置编码的话，中文会出现乱码
    $mail->Host = "smtp.126.com";// 发送方的SMTP服务器地址
    $mail->SMTPAuth = true;// 是否使用身份验证
    $mail->Username = "youdashequ@126.com";// 发送方的163邮箱用户名，就是你申请163的SMTP服务使用的163邮箱</span><span style="color:#333333;">
    $mail->Password = "aideren4599";// 发送方的邮箱密码，注意用163邮箱这里填写的是“客户端授权密码”而不是邮箱的登录密码！</span><span style="color:#333333;">
    $mail->SMTPSecure = "ssl";// 使用ssl协议方式</span><span style="color:#333333;">
    $mail->Port = 465;// 163邮箱的ssl协议方式端口号是465/994
    $mail->setFrom("youdashequ@126.com","优答社区");// 设置发件人信息，如邮件格式说明中的发件人，这里会显示为Mailer(xxxx@163.com），Mailer是当做名字显示
    $mail->addAddress($toemail,'');// 设置收件人信息，如邮件格式说明中的收件人，这里会显示为Liang(yyyy@163.com)
    $mail->addReplyTo("youdashequ@126.com","Reply");// 设置回复人信息，指的是收件人收到邮件后，如果要回复，回复邮件将发送到的邮箱地址
    //$mail->addCC("xxx@163.com");// 设置邮件抄送人，可以只写地址，上述的设置也可以只写地址(这个人也能收到邮件)
    //$mail->addBCC("xxx@163.com");// 设置秘密抄送人(这个人也能收到邮件)
    //$mail->addAttachment("bug0.jpg");// 添加附件
    $mail->Subject = "求答案通知";// 邮件标题
    $mail->Body = "<h2 style='color: #000'>$desc_content</h2>"."  完整科目答案已更新发布到:   "."<a href='http://www.youdashequ.com'><h1 style='color: blue'> http://www.youdashequ.com </h1></a>"."   请前往查看。";// 邮件正文
    //$mail->AltBody = "This is the plain text纯文本";// 这个是设置纯文本方式显示的正文内容，如果不支持Html方式，就会用到这个，基本无用
    $mail->IsHTML(true);
    if(!$mail->send()){     // 发送邮件
        return 0;
        //return $mail->ErrorInfo;
    }else{
        return 1;
    }
}


// 公共文字识别函数
function WenZhi($url){
    //require_once '../extend/tupianSB/AipOcr.php';
    $appid = '16631718';
    $appkey = 'zBl43OvgU0VkRGSPw76LYpfs';
    $secretkey = 'noQSvCG5vKQF8CjOtoGtxxFDXTUNQI7g';
    $client = new AipOcr($appid, $appkey, $secretkey);

    $image = file_get_contents($url);
   // 调用通用文字识别, 图片参数为本地图片
    $result = $client->basicGeneral($image);
    return $result;
}

// 公共语音识别函数
function YuYin($url){
    //require_once '../extend/tupianSB/AipOcr.php';
    $appid = '16644074';
    $appkey = 'lo82FppSSPOWEC8Z5DRbcZHl';
    $secretkey = 'G7pKY8DPsUL6i7QPBAo4i0EF9kDoaIRR';
    $client = new AipSpeech($appid, $appkey, $secretkey);
    // 识别本地文件
    $audio = file_get_contents($url);
    $result = $client->asr($audio, 'pcm', 16000, array(
        'dev_pid' => 1536,
    ));
    return $result;
}

//公共获取ACCESS_TOKEN
function getToken(){
    $fileTime = filemtime("token.txt");
    if(time() - $fileTime > 7200){
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx3480c538158618cc&secret=970d957aba967ef3a94e1259710b97f8";
        $data = https_request($url);
        $data = json_decode($data,true)['access_token'];
        file_put_contents("token.txt",$data);
    }else{
        $data = file_get_contents("token.txt");
        if(!$data){
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx3480c538158618cc&secret=970d957aba967ef3a94e1259710b97f8";
            $data = https_request($url);
            $data = json_decode($data,true)['access_token'];
            file_put_contents("token.txt",$data);
        }
    }

    return $data;
}

//获取地址经纬度坐标
function getAddress($address){
    $result = array();
    $ak = 'nb2SRx4zrgvUtpEDsVjD3Dj31CR09LG0';//您的百度地图ak，可以去百度开发者中心去免费申请
    $url ="http://api.map.baidu.com/geocoding/v3/?address={$address}&output=json&ak={$ak}&callback=showLocation";
    $data = file_get_contents($url);
    $data = str_replace('showLocation&&showLocation(', '', $data);
    $data = str_replace(')', '', $data);
    $data = json_decode($data,true);
    if (!empty($data) && $data['status'] == 0) {
        $result['lat'] = $data['result']['location']['lat'];
        $result['lng'] = $data['result']['location']['lng'];
        return $result;//返回经纬度结果
    }else{
        return null;
    }
}


